Skip to content

feat(web): add Go campaign entries and route upgrades to Pricing - #7122

Merged
AmyShang-alt merged 10 commits into
mainfrom
agent/go-plan-client-ui
Aug 20, 2026
Merged

feat(web): add Go campaign entries and route upgrades to Pricing#7122
AmyShang-alt merged 10 commits into
mainfrom
agent/go-plan-client-ui

Conversation

@Siri-Ray

@Siri-Ray Siri-Ray commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Why

The desktop/web workbench still sent its green campaign badge and generic upgrade affordances to Cloud's plan-selection modal. The confirmed Go launch flow uses public Pricing as the single comparison surface, while keeping the already-live DeepSeek campaign for paid users.

This PR implements that split in the OpenDesign client and removes the remaining live client paths that could construct a generic billing=plan modal link.

What users will see

  • Unpaid users see the Go launch modal during 2026-08-20 20:002026-09-03 20:00 (UTC+8).
  • The workbench's top-right Go entry is permanent for unpaid users. Its copy is Go 首月 $5 · 无限用, and it reuses the existing DeepSeek campaign badge position and capsule style.
  • Paid users continue to see the existing DeepSeek modal and top-right entry during the DeepSeek campaign window.
  • The Go modal and both top-right campaign entries open https://open-design.ai/pricing/.
  • Generic Upgrade / View plans actions across account, model, balance-gate, artifact, and settings surfaces now open Pricing. Balance/top-up still opens the Cloud dashboard, and a concrete plan selected on Pricing still owns the direct checkout handoff.

Surface area

  • UI — workbench campaign modal and top-right entry
  • Keyboard shortcut — new or changed
  • CLI / env var — new od subcommand or flag, new tools-dev / tools-pack flag, or new OD_* env var
  • API / contract — new /api/* endpoint, new SSE event, or changed shape in packages/contracts
  • Extension point — new entry under skills/, design-systems/, design-templates/, or craft/, or change to the skills protocol
  • i18n keys — added new typed translation keys
  • New top-level dependency — adding any new entry to the root package.json
  • Default behavior change — generic plan discovery now uses public Pricing
  • None — internal refactor, docs, tests, or translation update only

Screenshots

Actual workbench runtime with the Go launch modal and reused top-right campaign entry:

Go workbench modal and entry

Bug fix verification

  • Regression coverage: apps/web/tests/runtime/amr-guidance.test.ts, apps/web/tests/components/team-console-url.test.ts, and the affected component routing tests.
  • The old expectations failed against the Pricing implementation, then passed after the routing contract was updated.

Validation

  • pnpm guard
  • pnpm typecheck
  • pnpm --filter @open-design/web test — 630 files passed; 6,637 tests passed, 1 expected failure, 11 skipped
  • pnpm --filter @open-design/web exec vitest run -c vitest.config.ts --maxWorkers=2 tests/campaigns/deepseek-v4-flash.test.ts tests/campaigns/go-plan.test.ts tests/campaigns/deepseek-v4-flash-modal.test.tsx tests/campaigns/deepseek-v4-flash-ui-contract.test.ts — 4 files / 34 tests passed
  • pnpm --filter @open-design/web exec vitest run -c vitest.config.ts --maxWorkers=2 --shard=1/2 — 315 files passed; 3,381 tests passed, 4 skipped
  • pnpm --filter @open-design/web typecheck
  • pnpm --filter @open-design/web build
  • Actual workbench modal and top-right entry visually inspected at 1280×720

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Visual regression review

Head: ade5b03 · Base: 16fad1c

2 new visual case(s) have no baseline yet; review these screenshots before accepting their baselines.

0 changed · 49 unchanged · 2 new without baseline · 0 failed

New cases without baselines

PR PR PR
visual-go-campaign-600
pr
visual-go-campaign-short-height
pr
Unchanged cases
Case Main PR Diff
visual-avatar-local-agent-list
0 px (0.00%)
main pr diff
visual-avatar-local-agent-list-panel
0 px (0.00%)
main pr diff
visual-avatar-menu
0 px (0.00%)
main pr diff
visual-avatar-menu-panel
0 px (0.00%)
main pr diff
visual-avatar-open-design-model-picker
0 px (0.00%)
main pr diff
visual-critical-settings
0 px (0.00%)
main pr diff
visual-critical-workspace
0 px (0.00%)
main pr diff
visual-critical-workspace-preview
0 px (0.00%)
main pr diff
visual-design-system-detail
0 px (0.00%)
main pr diff
visual-design-systems
0 px (0.00%)
main pr diff
visual-home
0 px (0.00%)
main pr diff
visual-home-catalog
0 px (0.00%)
main pr diff
visual-home-context-picker
0 px (0.00%)
main pr diff
visual-home-context-picker-popover
0 px (0.00%)
main pr diff
visual-home-plugin-filter
0 px (0.00%)
main pr diff
visual-home-plugin-use-staged
0 px (0.00%)
main pr diff
visual-home-plugin-use-with-query
0 px (0.00%)
main pr diff
visual-home-staged-attachment
0 px (0.00%)
main pr diff
visual-integrations
0 px (0.00%)
main pr diff
visual-integrations-mcp
0 px (0.00%)
main pr diff

Visual diff is advisory only and does not block merging.

@lefarcen
lefarcen requested a review from nettee August 19, 2026 09:05
@lefarcen lefarcen added size/XL PR changes 700-1500 lines risk/medium Medium risk: regular code changes type/feature New feature labels Aug 19, 2026
@lefarcen

Copy link
Copy Markdown
Contributor

🧪 This PR has changes that need a manual QA pass before merge — please hold off self-merging for now; we’ll loop QA in once it’s merge-ready (and design/product have signed off where applicable).

@lefarcen lefarcen added the needs-validation Runtime change detected; needs human or /explore agent validation. label Aug 19, 2026

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed all 24 changed files and verified the live head. Focused campaign/UI tests (151 tests), direct web TypeScript, pnpm guard, and the production web build pass. I found two merge-safe follow-ups in the new campaign path; details are inline.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/campaigns/go-plan-content.ts Outdated
Comment thread apps/web/src/components/DeepSeekV4FlashCampaign.tsx
Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
@Siri-Ray

Copy link
Copy Markdown
Contributor Author

Looper fixer round completeb6ff6d5

  • ✅ Review comment on apps/web/src/campaigns/go-plan-content.ts (@nettee) — thread
    • Replaced the partial zh-only bundle in apps/web/src/campaigns/go-plan-content.ts with a complete Record covering all 19 locales, and added a matrix regression test that rejects empty or English-fallback modal and badge copy.
  • ⏸️ Review comment on apps/web/src/components/DeepSeekV4FlashCampaign.tsx:116 (@nettee) — thread
    • A boundary rerender probe passed on the seeded head: the existing audience === 'unknown' render guard immediately unmounts the portal, while effect cleanup releases the scroll lock. The expired offer is therefore already hidden, so no redundant state reset was added.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed all 24 changed files and the full changed ranges, including the Go campaign timing/audience split, locale bundles, Pricing routing, owner-only billing gates, and modal lifecycle. The live PR checks covering static validation, web workspace tests, E2E Vitest, and entry/settings visual suites are passing, and the earlier review threads are addressed or behaviorally verified.

Thanks for the careful campaign separation and complete locale coverage—this is a thoughtful, well-tested change.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@lefarcen
lefarcen requested a review from AmyShang-alt August 19, 2026 10:53

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed the live 26-file diff at 74c9890 and verified the focused campaign/routing tests (135 tests), web typecheck, pnpm guard, and the current PR checks. I found two merge-safe follow-ups in the new Go campaign modal; the concrete details are inline.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/components/DeepSeekV4FlashCampaign.tsx Outdated
Comment thread apps/web/src/components/DeepSeekV4FlashCampaign.module.css
Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
@Siri-Ray

Copy link
Copy Markdown
Contributor Author

Looper fixer round completeb798073

  • ✅ Review comment on apps/web/src/components/DeepSeekV4FlashCampaign.tsx (@nettee) — thread
    • Wired the Go dialog in DeepSeekV4FlashCampaign.tsx to getGoPlanCampaignCopy for all visible and accessible copy, including close/provider labels, the NEW badge, benefits, terms, and CTA. Added a French I18nProvider render regression covering the complete modal.
  • ✅ Review comment on apps/web/src/components/DeepSeekV4FlashCampaign.module.css:22 (@nettee) — thread
    • Raised the single-column breakpoint to 658px and enabled bounded scrolling below 477px height in DeepSeekV4FlashCampaign.module.css. Added 600×720 and 760×400 Playwright visual/geometry coverage proving the dialog, close control, and CTA remain reachable.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@lefarcen
lefarcen requested a review from nettee August 19, 2026 15:03

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed the complete 27-file changed range at b798073, including the Go campaign timing and audience split, all 19 locale bundles, Pricing routing, owner-only billing gates, modal lifecycle, responsive CSS, and the new visual boundary coverage. The live PR checks covering static validation, web tests, E2E Vitest, visual entry/settings, and UI P0 suites are passing; I also verified that the earlier localization and narrow-layout follow-ups are addressed in the final head.

Thanks for the careful campaign separation and thorough regression coverage—this is a thoughtful, well-finished change.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed all 27 changed files and the complete changed ranges at b798073. The Go campaign window and audience split, localized modal copy, Pricing routing, owner-only billing gates, responsive layout, and regression coverage are consistent. Focused web tests (150/150), web typecheck, pnpm guard, diff whitespace checks, the production web build, and the narrow/short viewport visual test passed; the PR checks are green as well.

Thanks for the careful campaign separation and thorough follow-up coverage—this is a thoughtful, polished change.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@AmyShang-alt AmyShang-alt added validated Runtime change validated (via /explore Pass or manual QA). and removed needs-validation Runtime change detected; needs human or /explore agent validation. labels Aug 20, 2026
@AmyShang-alt

Copy link
Copy Markdown
Contributor

@Siri-Ray

Thanks for the contribution. I completed QA validation for this PR.

QA Acceptance Record

Scope:

  • Go launch campaign entry/modal, localization, responsive layout, Pricing routing, and workspace billing permission boundaries.

Scope-to-evidence:

  • Campaign timing, persistence, routing, and localized copy -> focused Vitest campaign suite: 37/37 passed on b798073e.
  • English modal and Electron interaction -> launched the exact PR head, confirmed visible English copy, CTA/close controls, scroll lock, and Pricing destination.
  • Team/personal workspace behavior -> manually switched workspace contexts; the Go campaign entry remained available without exposing owner-only billing actions.
  • Responsive/static assets -> current CI visual suites are green; both added Go model logos returned HTTP 200 image/png and loaded with non-zero natural dimensions in Electron.

Verified:

  • Go campaign entry and modal behavior in Chinese and English.
  • Campaign seen-state persistence and start/end boundary behavior.
  • Pricing opens at https://open-design.ai/pricing/ with safe window flags.
  • Current exact-head CI checks are green.

Risks / notes:

  • A real purchased Go account was not available for the Settings plan-pill smoke test; the existing plan renderer displays Go when the backend reports plan=go.
  • Final Pricing-to-checkout workspace charging was treated as a non-blocking downstream integration check for this acceptance.

Conclusion:

  • Accepted.

@AmyShang-alt
AmyShang-alt added this pull request to the merge queue Aug 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 20, 2026
@Siri-Ray
Siri-Ray added this pull request to the merge queue Aug 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 20, 2026
@Siri-Ray
Siri-Ray added this pull request to the merge queue Aug 20, 2026

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed the complete 27-file changed range at ff507eaa765fb984c4b9460a8b3ff8c5dd3815d3, including the Go/DeepSeek audience split, Pricing routing, locale coverage, workspace billing gates, and responsive modal constraints. pnpm guard, pnpm typecheck, the full @open-design/web test suite, and the production web build all completed successfully; the repository's expected failure/skip counts remained unchanged. I found one merge-safe asset-reliability follow-up in the new Go modal; details are inline.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/components/DeepSeekV4FlashCampaign.tsx Outdated
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 20, 2026
Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
@Siri-Ray

Copy link
Copy Markdown
Contributor Author

Looper fixer round complete67bc187

  • ✅ Review comment on apps/web/src/components/DeepSeekV4FlashCampaign.tsx (@nettee) — thread
    • Rewired the DeepSeek, Kimi, and MiniMax marks in DeepSeekV4FlashCampaign.tsx to checked-in public assets. The campaign UI contract now verifies all five local assets and rejects unpkg.com dependencies.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Siri-Ray

I reviewed all 27 changed files and the complete live ranges at 67bc187, including the Go campaign window/audience split, localized modal copy, checked-in model assets, Pricing routing, workspace billing permissions, and responsive layout. The focused web campaign/routing suite passed 143/143 tests, web typecheck passed, pnpm guard passed, and the added 600px/short-height visual campaign case passed.

Thanks for the careful campaign separation and thorough follow-up coverage—this is a thoughtful, polished change.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
@AmyShang-alt AmyShang-alt added the backport release/v0.20.1 Backport this fix to release/v0.20.1 label Aug 20, 2026
@AmyShang-alt
AmyShang-alt added this pull request to the merge queue Aug 20, 2026
Merged via the queue into main with commit f6331fb Aug 20, 2026
29 checks passed
@open-design-release-bot

Copy link
Copy Markdown
Contributor

Successfully created backport PR for release/v0.20.1:

open-design-release-bot Bot added a commit that referenced this pull request Aug 20, 2026
…) (#7165)

* feat(web): add Go campaign entries and route upgrades to pricing

* fix(web): localize Go campaign copy

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)

* feat(web): match Go campaign demo UI

* test(web): align Go campaign source contract

* fix(web): align Go modal model icons

* fix(web): preserve Z.ai mark in Go modal list

* fix(web): localize and fit Go campaign modal

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)

* fix(web): clamp Go campaign modal height

* fix(web): use local Go campaign icons

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)

* test(e2e): stabilize Go campaign viewport assertion

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
(cherry picked from commit f6331fb)

Co-authored-by: Ray Xi <2667192167@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport release/v0.20.1 Backport this fix to release/v0.20.1 looper:hold risk/medium Medium risk: regular code changes size/XL PR changes 700-1500 lines type/feature New feature validated Runtime change validated (via /explore Pass or manual QA).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants